home *** CD-ROM | disk | FTP | other *** search
- #define FALSE 0
- #define TRUE 1
-
- lex_(inbuf, inlnt, outbuf, op, vbflag, lprscon)
- char inbuf[78];
- int outbuf[40], *inlnt, *op, *vbflag;
- int *lprscon; /* added */
- {
- /*
- * lex - lexical analyzer, converted from fortran
- *
- * input: one line of ascii characters
- * output: tokenized input, packed in radix-50 format
- */
-
- char j;
- int cp, i, k, prsptr;
- static int num601 = {601};
-
- for (i=0; i<40; i++)
- outbuf[i] = 0;
- *op = -1;
- prsptr = *lprscon - 1;
- /* printf("lex: inbuf=%s, inlnt=%d\n", inbuf, *inlnt); */
-
- toknlp:
- *op += 2;
- cp = 0;
- while ((*lprscon)++ <= *inlnt) {
- j = inbuf[prsptr++];
- /* printf("lex: chr=%c\n", j); */
- if ((j == '.') || (j == ','))
- break;
- else if (j == ' ')
- if (cp) /* if (cp != 0) */
- goto toknlp;
- else
- continue; /* first token */
- else if ((j >= 'A') && (j <= 'Z'))
- j -= '@';
- else if (((j >= '1') && (j <= '9')) || (j == '-'))
- j -= 0x0c; /* formfeed */
- else {
- if (*vbflag)
- rspeak_(&num601);
- return(FALSE);
- }
-
- if (cp >= 6)
- /*
- * ignore remainder of any token > 6 chars
- */
- continue;
- /*
- * pack three chars per word in radix-50 format
- */
- k = *op + (cp/3) - 1;
- /* printf("*op=%d, cp=%d, k=%d\n", *op, cp, k); */
- switch (cp%3) {
- case 0:
- outbuf[k] += j * 1560;
- case 1:
- outbuf[k] += j * 39;
- case 2:
- outbuf[k] += j;
- }
- cp++;
- }
- if (*lprscon > *inlnt)
- *lprscon = 1;
- if (!cp) /* if (cp == 0) */
- if (*op == 1)
- return(FALSE); /* no valid tokens */
- else {
- *op -= 2;
- return(TRUE);
- };
- }
-